home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / pyxmpp / presence.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  6KB  |  171 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __revision__ = '$Id: presence.py 671 2007-05-09 12:05:52Z jajcus $'
  5. __docformat__ = 'restructuredtext en'
  6. import libxml2
  7. from pyxmpp.utils import to_utf8, from_utf8
  8. from pyxmpp.stanza import Stanza
  9. from pyxmpp.xmlextra import common_ns
  10. presence_types = ('available', 'unavailable', 'probe', 'subscribe', 'unsubscribe', 'subscribed', 'unsubscribed', 'invisible', 'error')
  11. accept_responses = {
  12.     'subscribe': 'subscribed',
  13.     'subscribed': 'subscribe',
  14.     'unsubscribe': 'unsubscribed',
  15.     'unsubscribed': 'unsubscribe' }
  16. deny_responses = {
  17.     'subscribe': 'unsubscribed',
  18.     'subscribed': 'unsubscribe',
  19.     'unsubscribe': 'subscribed',
  20.     'unsubscribed': 'subscribe' }
  21.  
  22. class Presence(Stanza):
  23.     stanza_type = 'presence'
  24.     
  25.     def __init__(self, xmlnode = None, from_jid = None, to_jid = None, stanza_type = None, stanza_id = None, show = None, status = None, priority = 0, error = None, error_cond = None, stream = None):
  26.         self.xmlnode = None
  27.         if isinstance(xmlnode, Presence):
  28.             pass
  29.         elif isinstance(xmlnode, Stanza):
  30.             raise TypeError, "Couldn't make Presence from other Stanza"
  31.         elif isinstance(xmlnode, libxml2.xmlNode):
  32.             pass
  33.         elif xmlnode is not None:
  34.             raise TypeError, "Couldn't make Presence from %r" % (type(xmlnode),)
  35.         
  36.         if stanza_type and stanza_type not in presence_types:
  37.             raise ValueError, 'Invalid presence type: %r' % (type,)
  38.         
  39.         if stanza_type == 'available':
  40.             stanza_type = None
  41.         
  42.         if xmlnode is None:
  43.             xmlnode = 'presence'
  44.         
  45.         Stanza.__init__(self, xmlnode, from_jid = from_jid, to_jid = to_jid, stanza_type = stanza_type, stanza_id = stanza_id, error = error, error_cond = error_cond, stream = stream)
  46.         if show:
  47.             self.xmlnode.newTextChild(common_ns, 'show', to_utf8(show))
  48.         
  49.         if status:
  50.             self.xmlnode.newTextChild(common_ns, 'status', to_utf8(status))
  51.         
  52.         if priority and priority != 0:
  53.             self.xmlnode.newTextChild(common_ns, 'priority', to_utf8(unicode(priority)))
  54.         
  55.  
  56.     
  57.     def copy(self):
  58.         return Presence(self)
  59.  
  60.     
  61.     def set_status(self, status):
  62.         n = self.xpath_eval('ns:status')
  63.         if not status:
  64.             if n:
  65.                 n[0].unlinkNode()
  66.                 n[0].freeNode()
  67.             else:
  68.                 return None
  69.         
  70.         if n:
  71.             n[0].setContent(to_utf8(status))
  72.         else:
  73.             self.xmlnode.newTextChild(common_ns, 'status', to_utf8(status))
  74.  
  75.     
  76.     def get_status(self):
  77.         n = self.xpath_eval('ns:status')
  78.         if n:
  79.             return from_utf8(n[0].getContent())
  80.         else:
  81.             return None
  82.  
  83.     
  84.     def get_show(self):
  85.         n = self.xpath_eval('ns:show')
  86.         if n:
  87.             return from_utf8(n[0].getContent())
  88.         else:
  89.             return None
  90.  
  91.     
  92.     def set_show(self, show):
  93.         n = self.xpath_eval('ns:show')
  94.         if not show:
  95.             if n:
  96.                 n[0].unlinkNode()
  97.                 n[0].freeNode()
  98.             else:
  99.                 return None
  100.         
  101.         if n:
  102.             n[0].setContent(to_utf8(show))
  103.         else:
  104.             self.xmlnode.newTextChild(common_ns, 'show', to_utf8(show))
  105.  
  106.     
  107.     def get_priority(self):
  108.         n = self.xpath_eval('ns:priority')
  109.         if not n:
  110.             return 0
  111.         
  112.         
  113.         try:
  114.             prio = int(n[0].getContent())
  115.         except ValueError:
  116.             return 0
  117.  
  118.         return prio
  119.  
  120.     
  121.     def set_priority(self, priority):
  122.         n = self.xpath_eval('ns:priority')
  123.         if not priority:
  124.             if n:
  125.                 n[0].unlinkNode()
  126.                 n[0].freeNode()
  127.             else:
  128.                 return None
  129.         
  130.         priority = int(priority)
  131.         if priority < -128 or priority > 127:
  132.             raise ValueError, 'Bad priority value'
  133.         
  134.         priority = str(priority)
  135.         if n:
  136.             n[0].setContent(priority)
  137.         else:
  138.             self.xmlnode.newTextChild(common_ns, 'priority', priority)
  139.  
  140.     
  141.     def make_accept_response(self):
  142.         if self.get_type() not in ('subscribe', 'subscribed', 'unsubscribe', 'unsubscribed'):
  143.             raise ValueError, "Results may only be generated for 'subscribe','subscribed','unsubscribe' or 'unsubscribed' presence"
  144.         
  145.         pr = Presence(stanza_type = accept_responses[self.get_type()], from_jid = self.get_to(), to_jid = self.get_from(), stanza_id = self.get_id())
  146.         return pr
  147.  
  148.     
  149.     def make_deny_response(self):
  150.         if self.get_type() not in ('subscribe', 'subscribed', 'unsubscribe', 'unsubscribed'):
  151.             raise ValueError, "Results may only be generated for 'subscribe','subscribed','unsubscribe' or 'unsubscribed' presence"
  152.         
  153.         pr = Presence(stanza_type = deny_responses[self.get_type()], from_jid = self.get_to(), to_jid = self.get_from(), stanza_id = self.get_id())
  154.         return pr
  155.  
  156.     
  157.     def make_error_response(self, cond):
  158.         if self.get_type() == 'error':
  159.             raise ValueError, 'Errors may not be generated in response to errors'
  160.         
  161.         p = Presence(stanza_type = 'error', from_jid = self.get_to(), to_jid = self.get_from(), stanza_id = self.get_id(), error_cond = cond)
  162.         if self.xmlnode.children:
  163.             n = self.xmlnode.children
  164.             while n:
  165.                 p.xmlnode.children.addPrevSibling(n.copyNode(1))
  166.                 n = n.next
  167.         
  168.         return p
  169.  
  170.  
  171.